package com.sdry.good.logistics.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdry.good.logistics.entity.ReportDeficiencyOrderDetail;
import com.sdry.good.logistics.entity.ReportPicking;
import com.sdry.product.waitingarea.entity.StayContainerStare;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 领料清单
 * @author makejava
 * @since 2020-04-02 15:29:39
 */
public interface ReportPickingMapper extends BaseMapper<ReportPicking> {

    /**
     * 通过ID查询单条数据
     *
     * @param picId 主键
     * @return 实例对象
     */
    ReportPicking queryById(Long picId);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<ReportPicking> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param reportPicking 实例对象
     * @return 对象列表
     */
    List<ReportPicking> queryAll(ReportPicking reportPicking);

    /**
     * 新增数据
     *
     * @param reportPicking 实例对象
     * @return 影响行数
     */
    int insert(ReportPicking reportPicking);

    /**
     * 修改数据
     *
     * @param reportPicking 实例对象
     * @return 影响行数
     */
    int update(ReportPicking reportPicking);

    /**
     * 通过主键删除数据
     *
     * @param picId 主键
     * @return 影响行数
     */
    int deleteById(Long picId);

    /***
     * 分页查询
     * @param reportPicking 实例对象
     * @return 影响行数
     */
    List<ReportPicking> queryReportPickingPage(ReportPicking reportPicking);

    /***
     * 分页查询总数
     * @param reportPicking 实例对象
     * @return 影响行数
     */
    Long queryReportPickingTotal(ReportPicking reportPicking);
    /**
     * 条件查询数据(permissionType传值必须传remark才起作用——X)
     * @param param 实体条件
     * @return 实体集合
     */
    List<ReportPicking> queryAllByMution(ReportPicking param);
    /**
     * 条件查询清单编号(permissionType传值必须传remark才起作用——X)
     * @param param 实体条件
     * @return 实体集合
     */
    List<ReportPicking> queryPiNumberAllByMution(ReportPicking param);
    /**
     *	判断成品链是否满足接收的领料信息返回不满足的领料信息
     * @param ids 领料信息id集合
     * @param nums 领料信息数量集合（与id对应）
     * @param code 扫码集合 用","分割
     * @return 不满足的领料信息
     */
    List<ReportPicking> isSatisfyReportPickingsByPicIds(@Param("ids") String ids, @Param("nums") String nums, @Param("code") String code);
    /**
     *	成品链或成品库根据接收的领料信息进行解绑
     * @param ids 领料信息id集合
     * @param nums 领料信息数量集合（与id对应）
     * @param oid 出库单id
     * @param code 扫码集合 用","分割
     * @return 解绑领料信息数
     */
    public Integer  outReportPickingsByPicIds(@Param("ids") String ids, @Param("nums") String nums, @Param("oid") Long oid, @Param("code") String code);
    /**
     * 根据条件查询待发货信息
     * @param stayContainerStare 条件
     * @return
     */
    List<StayContainerStare> queryStayContainerStareByMution(StayContainerStare stayContainerStare);

    /**
     * 查询报缺
     * @param rdoId
     * @return
     */
    List<ReportDeficiencyOrderDetail> queryReportDeficiencyOrder(Long rdoId);

    /**
     * 成品链
     * @param maId 物料id
     * @return
     */
    @Select("SELECT sum(ma_num) FROM good_chain_inventory where ma_id = #{maId}  GROUP BY ma_id")
    Long queryCPStock(Long maId);

    /**
     * 成品库
     * @param maId 物料id
     * @return
     */
    @Select("select sum(gc_num) from good_warehouse_inventory where ma_id = #{maId} group by ma_id")
    Long queryCPKtock(Long maId);

    /**
     * 待转区库存
     * @param maId 物料id
     * @return
     */
    @Select("select sum(csrnum) as csrnum from stay_container_stare where  ma_id = #{maId} GROUP BY ma_id")
    Long queryDZtock(Long maId);

    /**
     * 更改报缺单据状态
     * @param rdoId 主键
     * @param userId
     * @return
     */
    @Update("update report_deficiency_order set del_flag = '1' ,dispatch_by = #{userId} where rdo_id = #{rdoId}")
    int updateReportDeficiencyOrder(@Param("rdoId") Long rdoId, @Param("userId") Long userId);
}